package no.knowit.pages.oppdragsgiver;

import java.util.List;

import no.knowit.entities.Oppdragsgiver;

import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

public class NyOppdragsgiver {
	@Property
	private Oppdragsgiver oppdragsgiver;
	@Property
	private Oppdragsgiver tempOppdragsgiver;
	@Property
	private List<Oppdragsgiver> oppdragsgivere;
	@Inject
	private Session session;

	private Boolean tempOppdragsgiverExists;
	@Component
	private Zone editZone;

	@Log
	@CommitAfter
	public void onSubmitFromNyOppdragsgiver() {
		if (oppdragsgiver.getId() != null)
			session.merge(oppdragsgiver);
		else {
			if (sjekkAtOppdragsgiverIkkeEksistererFraForAv())
				session.persist(oppdragsgiver);
			else {// gjør noe her
			}
		}
	}

	private boolean sjekkAtOppdragsgiverIkkeEksistererFraForAv() {
		Criteria likeOppdragsgivere = session.createCriteria(
				Oppdragsgiver.class).add(
				Restrictions.eq("navn", oppdragsgiver.getNavn()));
		return likeOppdragsgivere.list().isEmpty();
	}

	public Zone onActionFromFyllUtData(Long id) {
		Criteria criteria = session.createCriteria(Oppdragsgiver.class);
		criteria.add(Restrictions.eq("id", id));
		oppdragsgiver = (Oppdragsgiver) criteria.list().get(0);
		return editZone;
	}

	public Object onPassivate() {
		try {
			return oppdragsgiver.getId();
		} catch (Exception e) {
		}
		return true;
	}

	public void onActivate() {
		onActivate(null);
	}

	public void onActivate(Long id) {
		if (id != null) {
			Criteria criteria = session.createCriteria(Oppdragsgiver.class);
			criteria.add(Restrictions.eq("id", id));
			try {
				oppdragsgiver = (Oppdragsgiver) criteria.list().get(0);
			} catch (Exception e) {
			}
		}
		oppdragsgivere = session.createCriteria(Oppdragsgiver.class).list();
	}

	public Boolean getTempOppdragsgiverExists() {
		return tempOppdragsgiverExists;
	}
}
